package com.hz.ruoyiequipment.warning.mapper;

import com.hz.ruoyiequipment.warning.domain.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @ClassName AgrAlertLinkMapper
 * @Description 联动预警
 * @Author 陈萝瑶
 * @Date 2025/3/10 12:06
 */
@Repository
public interface AgrAlertLinkMapper {

    public List<AgrAlertLinkResultVo> getAllBySourceId(Long sourceId);
    /**
     * 根据批次id查询树
     * @param batchId 批次Id
     * @return List<AgrAlertLinkVo>
     */
    public List<AgrAlertLinkVo> getByBatchName(Long batchId);

    /**
     * 获取触发设备
     * @param breedId 种质Id
     * @param batchId 批次Id
     * @return List<AgrAlertLinkVo>
     */
    public List<AgrAlertLinkVo> getSourceEquipment(@Param("breedId") Long breedId, @Param("batchId") Long batchId);

    /**
     * 获取目标设备
     * @param breedId 种质Id
     * @param batchId 批次Id
     * @return List<AgrAlertLinkVo>
     */
    public List<AgrAlertLinkVo> getTargetEquipment(@Param("breedId") Long breedId, @Param("batchId") Long batchId);

    /**
     * 根据种质Id查询所有阈值
     * @param breedId 种质Id
     * @return List<AgrAlertLinkResultVo>
     */
    public List<AgrAlertLinkResultVo> getAllByBreedId(Long breedId);

    /**
     * 根据地块id查询批次
     * @param plotsId 地块Id
     * @param batchStatus 批次状态（已分配）
     * @return List<AgrAlertLinkVo>
     */
    public List<AgrAlertLinkVo> getBatchByPlotsId(@Param("plotsId") Long plotsId, @Param("batchStatus") Integer batchStatus);

    /**
     * 根据品种id查询阈值
     * @param breedId 种质Id
     * @return List<AgrAlertLinkVo>
     */
    public List<AgrAlertLinkVo> getByBreedId(@Param("breedId")Long breedId,@Param("plotsId") Long plotsId);

    /**
     * 根据批次名称查询品种id
     * @param batchName 批次名称
     * @return AgrAlertLinkVo
     */
    public AgrAlertLinkVo getBreedId(String batchName);

    /**
     * 根据设备名称查询设备id
     * @param equipmentName 设备名称
     * @return AgrAlertLinkVo
     */
    public AgrAlertLinkVo getEquip(String equipmentName);

    /**
     * 根据种质id查询触发条件
     * @param breedId 种质id
     * @return List<AgrAlertLinkResultVo>
     */
    public List<AgrAlertLinkResultVo> getTriggerByBreedId(Long breedId);

    /**
     * 根据阈值id查询字段id
     * @param thresholdId 阈值id
     * @param fieldName 阈值字段名
     * @return AgrAlertLinkResultVo
     */
    public AgrAlertLinkResultVo getFieldId(@Param("thresholdId") Long thresholdId,@Param("fieldName") String fieldName);

    /**
     * 根据触发条件名称查询异常id
     * @param exceptionName 触发条件名称
     * @return AgrAlertLinkResultVo
     */
    public AgrAlertLinkResultVo getConId(String exceptionName);

    /**
     * 根据字段id查询所有联动信息
     * @param fieldId 字段id
     * @return AgrAlertLinkResultVo
     */
    public AgrAlertLinkResultVo selectAllAgrAlertEquip(Long fieldId);

    /**
     * 根据执行字段查询所有联动信息
     * @param action
     * @return AgrAlertLinkResultVo
     */
    public AgrAlertLinkResultVo selectActFieldId(Action action);

    /**
     * 新增预警设备联动规则
     * @param trigger 预警设备联动规则
     * @return 结果
     */
    public int insertAgrAlertThresholdField(Trigger trigger);

    /**
     * 根据设备id和字段id查询预警设备联动规则
     * @param device 触发设备Id
     * @param fieldId 阈值字段Id
     * @return Trigger
     */
    public List<Trigger> selectAgrAlertEquip(@Param("device") Long device,@Param("fieldId") Long fieldId);

    /**
     * 新增预警设备联动规则
     * @param action 执行器
     * @return int
     */
    public int insertAgrAlertLink(Action action);

    /**
     * 新增预警设备阈值规则
     * @param trigger 触发器
     * @return int
     */
    public int insertTriggerAgrAlertLink(Trigger trigger);

    /**
     * 删除阈值规则
     * @param fieldId 阈值字段Id
     * @return int
     */
    public int delTrigger(Long fieldId);

    /**
     * 删除联动规则
     * @param fieldId 阈值字段Id
     * @return int
     */
    public int delLink(Long fieldId);

    /**
     * 修改阈值批次表
     * @param breedId 种质Id
     * @param batchId 批次Id
     * @return int
     */
    public int updateAgrAlertField(@Param("breedId") Long breedId,@Param("batchId") Long batchId);

    /**
     * 修改预警设备联动规则
     * @param action 执行器
     * @return int
     */
    public int updateAgrAlertEquipLink(Action action);

}
